//手写typeof
// function typeOf(obj){
//     let res = Object.prototype.toString.call(obj);
//    res = res.substring(0,res.length-1).toLowerCase()
//    return res
// }
//问题1：原型中包含的引用类型属性将被所有实例共享；
//问题2：子类在实例化的时候不能给父类构造函数传参；
//animal函数参数name 函数的this=name getname返回name的值
//定义一个dog构造函数调用上面的函数用函数上的call方法实现构造函数继承是指原型为其实例·
// function Animal(name){
//     this.name = name;
//     this.getname = function (){
//         return this.name;
//     }
// }
// function Dog(name){
//     Animal.call(this.name)
// }
// Dog.prototype = new Animal()
//缺点通过构造函数创建实例函数上的方法都会在每一个实例中创建一遍不能做到共享方法
//通过借用构造函数模式 和 原型链继承模式 实现继承
// function Animal(name){
//     this.name = name;
//     this.colors = ['red','black']
// }
// Animal.prototype.getName = function(){
//     return this.name;
// }
// function dog(name,age){
//     Animal.call(this,name);
//     this.age = age;
// }
// dog.prototype = new Animal()
//如果没有则会指向Animal的原型
// dog.prototype.constructor = dog;
//上面的共享实例属性问题是原型链上的属性会被实例修改造成污染
// class Animal{
//     constructor(name){
//         this.name = name;
//     }
//     getName(){
//         return this.name;
//     }
// }
// class Dog extends Animal{
//     constructor(name,age){
//         super(name);
//         this.age = age;
//     }
// }
//数组去重通过filter方法取实现 es5的方法时间复杂度n^2
// function un (arr){
//     var res = arr.filter(function (item,index,arr){
//         return arr.indexOf(item)===index;
//     });
//     return res;
// }
//数组去重es6方法  当只有一个变量时可以省略括号 时间复杂度为n
// let unique = arr =>[...new Set(arr)]

//数组扁平化 es6方法flat
[1,[2,[3]]].flat(2)//里面的参数是拉平深度 如果是depth = infinity是无线拉平
//数组扁平化es5方法
//是的，Array.isArray(arr[i]) 中的 isArray 是 JavaScript 中数组的静态方法，
// 用于判断某个值是否为数组，它属于 Array 构造函数本身，而不是数组实例的方法。
// function flatten(arr) {
//     var result = [];
//     for (var i = 0, len = arr.length; i < len; i++) {
//         if (Array.isArray(arr[i])) {
//             result = result.concat(flatten(arr[i]));
//         } else {
//             result.push(arr[i]);
//         }
//     }
//     return result;
// }
//es6扁平化 
// function flatten(arr){
//     while(arr.some(item=>Array.isArray(item))){
//         arr= [].cancat(...arr);
//     }
//     return arr;
// }
function a(){
  this.color = [red,green]
}
a.prototype.getName = function(){
  return this.color
}
 function b(){
    
 }
